﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using BLL;

namespace ChamCongMain.Form
{
    public partial class frmLuong : DevExpress.XtraEditors.XtraForm
    {
        public Delegates.RefeshGrid LoadData;
        ChucNang cn;
        public frmLuong(ChucNang cn, Luong l)
        {
            InitializeComponent();
            LoadDataToGrid();
            nbrNam.Value = DateTime.Today.Year;
            this.cn = cn;
            if (this.cn == ChucNang.Sua)
            {
                this.Text = "Sửa Lương";
                SetValueForForm(l);
            }
        }

        private void SetValueForForm(Luong l)
        {
            txtGhiChu.Text = l.GhiChu;
            glkCongNhan.EditValue = l.CongNhanId;
            nbrThang.Value = int.Parse(l.Thang.ToString());
            nbrNam.Value = int.Parse(l.Nam.ToString());
            calTienLuong.Value = decimal.Parse(l.TienLuong.ToString());
            dateNgayNhan.EditValue = l.NgayNhan;
            if (l.TamUng != null)
                calTamUng.EditValue = double.Parse(l.TamUng.ToString());
        }

        private void LoadDataToGrid()
        {
            CongNhanBLL congNhan = new CongNhanBLL();
            glkCongNhan.Properties.DisplayMember = "HoTen";
            glkCongNhan.Properties.ValueMember = "CongNhanId";
            glkCongNhan.Properties.DataSource = congNhan.GetAllCongNhan();
        }

        public Luong GetValueFromForm()
        {
            Luong _luong = new Luong();
            _luong.CongNhanId = int.Parse(glkCongNhan.EditValue.ToString());
            _luong.Thang = int.Parse(nbrThang.Value.ToString());
            _luong.Nam = int.Parse(nbrNam.Value.ToString());
            if (dateNgayNhan.EditValue != null)
                _luong.NgayNhan = DateTime.Parse(dateNgayNhan.EditValue.ToString());
            _luong.TienLuong = double.Parse(calTienLuong.EditValue.ToString());
            _luong.GhiChu = txtGhiChu.Text;
            _luong.TamUng = double.Parse(calTamUng.EditValue.ToString());
            return _luong;
        }

        private void ClearForm()
        {
            txtGhiChu.Text = "";
            glkCongNhan.EditValue = "";
            nbrNam.Value = DateTime.Today.Year;
            nbrThang.Value = DateTime.Today.Month;
            calTamUng.EditValue = 0;
            calTienLuong.EditValue = 0;
            dateNgayNhan.EditValue = DateTime.Today;
            this.cn = ChucNang.Them;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            Luong cd = GetValueFromForm();
            LuongBLL cdbll = new LuongBLL();
            if (cn == ChucNang.Them)
            {
                cdbll.InsertLuong(cd);
                LoadData(cdbll.GetAllLuong());
                XtraMessageBox.Show("Thêm thành công!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                cdbll.UpdateLuong(cd);
                LoadData(cdbll.GetAllLuong());
                XtraMessageBox.Show("Sửa thành công!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            this.Close();
        }

        private void btnLuuThem_Click(object sender, EventArgs e)
        {
            Luong cd = GetValueFromForm();
            LuongBLL cdbll = new LuongBLL();
            if (cn == ChucNang.Them)
            {
                cdbll.InsertLuong(cd);
                LoadData(cdbll.GetAllLuong());
                XtraMessageBox.Show("Thêm thành công!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                cdbll.UpdateLuong(cd);
                LoadData(cdbll.GetAllLuong());
                XtraMessageBox.Show("Sửa thành công!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            ClearForm();
        }

        private void btnHuyBo_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void nbrThang_ValueChanged(object sender, EventArgs e)
        {
            float tu = (calTamUng.Text.Length <= 0 ? 0 : float.Parse(calTamUng.Text));
            int t = (int)nbrThang.Value;
            int n = (int)nbrNam.Value;

            string c = "";
            if (glkCongNhan.EditValue != null)
                calTienLuong.Text = TinhLuong(tu, t, n).ToString();
            else
            {
                MessageBox.Show("Lương tháng này đã tồn tại trong csdl ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }

        private void glkCongNhan_EditValueChanged(object sender, EventArgs e)
        {
            float tu = (calTamUng.Text.Length <= 0 ? 0 : float.Parse(calTamUng.Text));
            int t = (int)nbrThang.Value;
            int n = (int)nbrNam.Value;

            string c = "";
            if (glkCongNhan.EditValue != null)
                calTienLuong.Text = TinhLuong(tu, t, n).ToString();
            else
            {
                MessageBox.Show("Lương tháng này đã tồn tại trong csdl ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }
        /// <summary>
        /// tinh luong cho nhan vien
        /// </summary>
        /// <param name="tamung"></param>
        /// <param name="thang"></param>
        /// <param name="nam"></param>
        private float TinhLuong(float tamung = 0, int thang = 0, int nam = 0)
        {


            BLL.LuongBLL lbll = new BLL.LuongBLL();
            float tienluong = 0;

            if (lbll.CheckThangNam(thang, nam))
            {
                BLL.PhanCongBLL pvbll = new BLL.PhanCongBLL();
                if (glkCongNhan.EditValue != null || calTamUng.EditValue != null)
                {
                    PhanCong pc = pvbll.GetPhanCongByMonthYearIdNhanVien(thang, nam, int.Parse(glkCongNhan.EditValue.ToString()));
                    if (pc == null)
                        return 0;
                    BLL.LuongBLL lll = new BLL.LuongBLL();
                    tienluong = (float)((pc.CongDoan.TriGia * (pc.SoLuong == null ? 0 : pc.SoLuong)) - (float)(calTamUng.Text.Length < 1 ? 0 : calTamUng.Value));
                }
                else
                {
                    MessageBox.Show("Chọn công nhân,tạm ứng để tính lương.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return 0;
                }
            }
            else
            {
                MessageBox.Show("Lương tháng này đã tồn tại trong csdl ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return 0;
            }
            return tienluong;
        }

    }
}